home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
magazine
/
drdobbs
/
1987
/
08
/
shammlst.aug
< prev
next >
Wrap
Text File
|
1987-08-12
|
20KB
|
770 lines
Listing 1: BASIC source code for the Sieve benchmark
1000 ' Sieve Benchmark Test
1001 ' Version 1.0 5/30/86 Namir C. Shammas
1010 DEFINT A-Z
1020 SIZE = 7000
1030 MAXITER = 10
1040 TRUE = 1: FALSE = 0
1050 DIM FLAGS(SIZE)
1060 PRINT "START ";MAXITER;" ITERATION"
1065 TIME$ = "00:00:00.00"
1070 FOR ITER = 1 TO MAXITER
1080 COUNT = 0
1090 FOR I = 0 TO SIZE
1100 FLAGS(I) = TRUE
1110 NEXT I
1120 FOR I = 0 TO SIZE
1130 IF FLAGS(I) <> TRUE THEN 1210
1140 PRIME = I+I+3
1150 K = I+PRIME
1160 WHILE K <= SIZE
1170 FLAGS(K) = FALSE
1180 K = K + PRIME
1190 WEND
1200 COUNT = COUNT + 1
1210 NEXT I
1220 NEXT ITER
1225 PRINT "Time is ";TIME$
1230 PRINT COUNT;" PRIMES"
1240 END
Listing 2: Translated C source code for the Sieve benchmark
char *TIME_(), *balloc();
static int *FLAGS, count, false, i, iter, k, maxiter, prime, size, true;
static int it_1, it_2, it_3;
static char *st_1;
static int ml_1;
main(argc, argv)
int argc;
char *argv[];
{
bio_init(argc, argv, 1);
/* Sieve Benchmark Test */
/* Version 1.0 5/30/86 Namir C. Shammas */
size = 7000;
maxiter = 10;
true = 1;
false = 0;
ml_1 = size+1;
bfree(FLAGS);
FLAGS = (int*)balloc((long)sizeof(int) * (size+1));
BPRINT("s;i;s", "\006START ", maxiter, "\012 ITERATION");
STIME_("\01300:00:00.00");
it_1 = maxiter;
for (iter = 1; iter <= it_1; ++iter)
{
count = 0;
it_2 = size;
for (i = 0; i <= it_2; ++i)
{
FLAGS[i] = true;
}
it_3 = size;
for (i = 0; i <= it_3; ++i)
{
if (FLAGS[i] != true)
goto l_1210;
prime = i + i + 3;
k = i + prime;
while (k <= size)
{
FLAGS[k] = false;
k = k + prime;
}
count = count + 1;
l_1210:;
}
}
BPRINT("s;s", "\010Time is ", TIME_(&st_1));
BPRINT("i;s", count, "\007 PRIMES");
bexit(0);
bexit(0);
}
Listing 3: BASIC source code for a root-seeking program
1010 DEFDBL A-H,P-Z
1020 DEFINT I-O
1030 DEF FNF(X) = EXP(X) - 3*X*X
1040 CLS
1050 INPUT "Enter guess : ";X : PRINT
1060 DATA 1.0E-08, 50
1070 READ Accuracy, MAX.ITER
1075 Iter = 0
1076 Diverge% = 1
1077 Diff = 2 * Accuracy
1078 WHILE ABS(Diff) > Accuracy
1080 ' Start root seeking method
1090 H = 0.01
1100 IF ABS(X) > 1 THEN H = H * X
1110 Diff = 2 * H * FNF(X) / (FNF(X+H) - FNF(X-H))
1120 X = X - Diff
1130 Iter = Iter + 1
1140 IF Iter > MAX.ITER THEN Diverge% = 0
1150 WEND
1155 IF (Diverge% = 0) THEN Accuracy = 10 * Accuracy : GOTO 1075
1160 PRINT USING "Root = +#.#######^^^^";X : PRINT
1170 PRINT USING "Number of iterations = ##";Iter : PRINT
1180 PRINT USING "Accuracy = #.###^^^^";Accuracy : PRINT
1190 END
Listing 4: Translated C source code for a root-seeking program
typedef struct data
{
unsigned d_line;
char *d_text;
}DATA;
static DATA da_1[] = {1060, "1.0E-08, 50\n"};
double ABS(), EXP(), f_raise();
static int divergeI, iter, max_iter, n;
static double accuracy, diff, f, f0, f1, f2, h, x, x2;
DATA *data_stmts[] =
{
da_1, 0
};
main(argc, argv)
int argc;
char *argv[];
{
bio_init(argc, argv, 1);
CLS();
l_1040:;
INPUT("P ;i", "\035Enter function number [1..3] ", &n);
BPRINT("");
if (-((n < 1)) | -((n > 3)))
goto l_1040;
INPUT("P ;d", "\016Enter guess : ", &x);
BPRINT("");
BREAD(" d,i", &accuracy, &max_iter);
l_1075:;
iter = 0;
divergeI = 1;
diff = 2 * accuracy;
while (ABS(diff) > accuracy)
{
/* Start root seeking method */
h = 0.01;
if (ABS(x) > 1)
h = h * x;
x2 = x;
pr_1200();
f0 = f;
x2 = x + h;
pr_1200();
f1 = f;
x2 = x - h;
pr_1200();
f2 = f;
diff = 2 * h * f0 / (f1 - f2);
x = x - diff;
iter = iter + 1;
if (iter > max_iter)
divergeI = 0;
}
if ((divergeI == 0))
{
accuracy = 10 * accuracy;
goto l_1075;
}
UPRINT("\025Root = +#.#######^^^^", "d", x);
BPRINT("");
UPRINT("\032Number of iterations = ###", "i", iter);
BPRINT("");
UPRINT("\024Accuracy = #.###^^^^", "d", accuracy);
BPRINT("");
bexit(0);
}
pr_1200()
{
/* Subroutine to handle function catalogue */
switch (n)
{
case 1:
pr_2100();
break;
case 2:
pr_2200();
break;
case 3:
pr_2300();
break;
}
return;
/* Subroutine number 1 */
}
pr_2100()
{
f = EXP(x2) - 3 * f_raise(x2, (double) 2);
return;
/* Subroutine # 2 */
}
pr_2200()
{
f = f_raise(x2, (double) 2) - 5 * x2 + 6;
return;
/* Subroutine # 3 */
}
pr_2300()
{
f = f_raise(x2, (double) 3) - 5 * x2 + 10;
return;
bexit(0);
}
Listing 5: BASIC source code for Find/Replace utility.
1000 ' Batch Find/Replace Utility Version 1.1 2/7/86
1010 ' IBM PC BASICA version 2.0
1020 ' Copyright (c) 1987 Namir Clement Shammas
1030 '---------------------------------------------------
1040 OPTION BASE 1
1050 DEFINT A-Z
1060 DIM FILENAME$(20),FIND.STR$(30)
1070 DIM REPLACE.STR$(30),REPLACE.FLAG(30),TEXT.LINE$(500)
1080 '
1090 TRUE = 1 : FALSE = 0 'Set true/false
1100 MAX.LINES = 500 ' Current maximum number of lines read from a file
1110 MAX.STRINGS = 30 ' Number of find/replace strings
1120 MAX.FILES = 20 ' Maximum number of files
1140 CLS
1150 '
1160 T$ = "BATCH FILE FIND/REPLACE PROGRAM" : GOSUB 2290
1170 T$ = "VERSION 1.0" : GOSUB 2290 : PRINT : PRINT
1180 GOSUB 1560 'GET.FILENAMES : Get filenames
1190 GOSUB 1820 'GET.STRINGS : Get search/replace strings
1200 FOR K = 1 TO NUM.FILES
1210 GOSUB 2060 ' READ.LINES: Read text lines from a file
1220 CHANGED = FALSE
1230 FOR I = 1 TO NUM.STRINGS
1240 FOUND = FALSE
1250 FOR J = 1 TO NUM.LINES
1260 PTR = INSTR(TEXT.LINE$(J),FIND.STR$(I))
1270 WHILE PTR > 0
1280 IF (FOUND = TRUE) THEN 1330
1290 FOUND = TRUE
1300 LPRINT
1310 LPRINT "KEYWORD : ";FIND.STR$(I)
1330 LPRINT J;":";TEXT.LINE$(J)
1340 IF (REPLACE.FLAG(I) = FALSE) THEN 1440
1350 CHANGED = TRUE
1360 FIRST$ = ""
1370 IF PTR > 1 THEN FIRST$ = MID$(TEXT.LINE$(J),1,(PTR-1))
1380 LAST$ = ""
1390 IF (PTR+LEN(FIND.STR$(I))) <= LEN(TEXT.LINE$(J))
THEN 1420
1400 LAST$ = MID$(TEXT.LINE$(J),(PTR+LEN(FIND.STR$(I))))
1420 TEXT.LINE$(J) = FIRST$ + REPLACE.STR$(I) + LAST$
1440 PTR = INSTR(PTR+1,TEXT.LINE$(J),FIND.STR$(I))
1450 WEND
1460 NEXT J
1470 NEXT I
1480 IF (CHANGED = TRUE) THEN GOSUB 2190 ' WRITE.LINES
1490 NEXT K
1500
1510 LPRINT CHR$(140) ' form feed
1520
1530 END
1540
1550 '--------------------------------------------------
1560 ' GET.FILENAMES: Subroutine to input filenames from the keyboard
1570 NUM.FILES = 0
1580 WHILE (NUM.FILES <= 0) OR (NUM.FILES > MAX.FILES)
1590 INPUT "Enter number of files ";NUM.FILES
1600 PRINT
1610 WEND
1620 FOR I = 1 TO NUM.FILES
1630 'REPEAT.LOOP1:
1640 PRINT "Enter filename # ";I;" ";
1650 INPUT FILENAME$(I) : PRINT
1660 ON ERROR GOTO 1750
1670 OPEN "I",1,FILENAME$(I)
1680 CLOSE #1
1690 ON ERROR GOTO 0
1700 IF FILENAME$(I) = "" THEN 1630
1710 NEXT I
1720 RETURN
1740 '-------------------------------------------------
1750 'HANDLE: Error hander for bad filenames
1760 PRINT "File ";FILENAME$(I);" was not found"
1770 PRINT
1780 FILENAME$(I) = ""
1790 RESUME NEXT
1800
1810 '--------------------------------------------------
1820 ' GET.STRINGS: Subroutines to input search/replace strings
1830 NUM.STRINGS = 0
1840 WHILE (NUM.STRINGS <= 0) OR (NUM.STRINGS > MAX.STRINGS)
1850 INPUT "Enter number of search/replace strings ";NUM.STRINGS
1860 PRINT
1870 WEND
1880 FOR I = 1 TO NUM.STRINGS
1890 REPLACE.STR$(I) = ""
1900 PRINT : PRINT "For string # ";I
1910 INPUT " Enter string ";FIND.STR$(I)
1920 INPUT " R)eplace F)ind ";A$ : PRINT
1930 IF (INSTR("Rr",MID$(A$,1,1)) = 0) THEN REPLACE.FLAG(I) =
FALSE ELSE REPLACE.FLAG(I) = TRUE
1980 IF REPLACE.FLAG(I) = FALSE THEN 2020
1990 INPUT "Enter replacement string ";REPLACE.STR$(I)
2000 PRINT
2020 NEXT I
2030 RETURN
2040
2050 '--------------------------------------------------
2060 ' READ.LINES: Subroutines to read text lines
2070 LPRINT
2080 LPRINT "PROCESSING FILE : ";FILENAME$(K)
2090 OPEN "I",1,FILENAME$(K)
2100 NUM.LINES = 0
2110 WHILE (NOT EOF(1)) AND (NUM.LINES <= MAX.LINES)
2120 NUM.LINES = NUM.LINES + 1
2130 LINE INPUT #1,TEXT.LINE$(NUM.LINES)
2140 WEND
2150 CLOSE #1
2160 RETURN
2180 '-------------------------------------------------
2190 ' WRITE.LINES: Subroutines to write text lines
2200 OPEN "O",1,FILENAME$(K)
2210 FOR I = 1 TO NUM.LINES
2220 PRINT #1,TEXT.LINE$(I)
2230 NEXT I
2240 CLOSE #1
2250 RETURN
2270 '--------------------------------------------------
2280 ' Subroutine to center a message
2290 PRINT SPC(40 - LEN(T$)\2);T$
2300 RETURN
Listing 6: Translated C source code for Find/Replace utility.
extern int on_error, err_code, err_stmt, trap_line, trap_err;
char *CHR_(), *MID_(), *s_asgn(), *s_cat();
int EOF(), INSTR(), LEN();
static int AREPLACE_FLAG[31], changed, false, found, i, j, k, max_files;
static int max_lines, max_strings, num_files, num_lines, num_strings, ptr;
static int true;
static char *FILENAME_[21], *FIND_STR_[31], *REPLACE_STR_[31];
static char *TEXT_LINE_[501], *a_, *first_, *last_, *t_;
static int it_1, it_2, it_3, it_4, it_5, it_6;
static char *st_1, *st_2;
main(argc, argv)
int argc;
char *argv[];
{
bio_init(argc, argv, 1);
/* Batch Find/Replace Utility Version 1.1 2/7/86 */
/* IBM PC BASICA version 2.0 */
/* Copyright (c) 1987 Namir Clement Shammas */
/* --------------------------------------------------- */
free_sp(FILENAME_, 21, 'S');
free_sp(FIND_STR_, 31, 'S');
free_sp(REPLACE_STR_, 31, 'S');
free_sp(TEXT_LINE_, 501, 'S');
true = 1;
false = 0; /* Set true/false */
max_lines = 500; /* Current maximum number of lines read from a file */
max_strings = 30; /* Number of find/replace strings */
max_files = 20; /* Maximum number of files */
CLS();
t_ = s_asgn(t_, "\037BATCH FILE FIND/REPLACE PROGRAM");
sub_push(1);
goto l_2290;
g_1:;
t_ = s_asgn(t_, "\013VERSION 1.0");
sub_push(2);
goto l_2290;
g_2:;
E_0:;
BPRINT("");
if (err_code) {err_stmt=0; goto err_trap;}
E_1:;
BPRINT("");
if (err_code) {err_stmt=1; goto err_trap;}
E_2:;
sub_push(3); /* GET.FILENAMES : Get filenames */
goto l_1560;
g_3:;
sub_push(4); /* GET.STRINGS : Get search/replace strings */
goto l_1820;
g_4:;
it_1 = num_files;
for (k = 1; k <= it_1; ++k)
{
sub_push(5); /* READ.LINES: Read text lines from a file */
goto l_2060;
g_5:;
changed = false;
it_2 = num_strings;
for (i = 1; i <= it_2; ++i)
{
found = false;
it_3 = num_lines;
for (j = 1; j <= it_3; ++j)
{
E_3:;
ptr = INSTR(-1, TEXT_LINE_[j], FIND_STR_[i]);
if (err_code) {err_stmt=3; goto err_trap;}
E_4:;
while (ptr > 0)
{
if ((found == true))
goto l_1330;
found = true;
E_5:;
BLPRINT("");
if (err_code) {err_stmt=5; goto err_trap;}
E_6:;
BLPRINT("s;s", "\012KEYWORD : ", FIND_STR_[i]);
if (err_code) {err_stmt=6; goto err_trap;}
E_7:;
l_1330:;
BLPRINT("i;s;s", j, "\001:", TEXT_LINE_[j]);
if (err_code) {err_stmt=7; goto err_trap;}
E_8:;
if ((AREPLACE_FLAG[i] == false))
goto l_1440;
changed = true;
first_ = s_asgn(first_, "\000");
if (ptr > 1)
{
E_9:;
first_ = s_asgn(first_, MID_(&st_1, TEXT_LINE_[j],
1, (ptr - 1)));
if (err_code) {err_stmt=9; goto err_trap;}
E_10:;
}
last_ = s_asgn(last_, "\000");
if ((ptr + LEN(FIND_STR_[i])) <= LEN(TEXT_LINE_[j]))
goto l_1420;
E_11:;
last_ = s_asgn(last_, MID_(&st_1, TEXT_LINE_[j], (ptr
+ LEN(FIND_STR_[i])), -1));
if (err_code) {err_stmt=11; goto err_trap;}
E_12:;
l_1420:;
TEXT_LINE_[j] = s_asgn(TEXT_LINE_[j], s_cat(&st_2, s
_cat(&st_1,
first_, REPLACE_STR_[i]), last_));
if (err_code) {err_stmt=12; goto err_trap;}
E_13:;
l_1440:;
ptr = INSTR(ptr + 1, TEXT_LINE_[j], FIND_STR_[i]);
if (err_code) {err_stmt=13; goto err_trap;}
E_14:;
}
}
}
if ((changed == true))
{ /* WRITE.LINES */
sub_push(6); /* WRITE.LINES */
goto l_2190;
g_6:;
}
}
E_15:;
BLPRINT("s", CHR_(&st_1, 140)); /* form feed */
if (err_code) {err_stmt=15; goto err_trap;}
E_16:;
bexit(0);
/* -------------------------------------------------- */
l_1560:;
/* GET.FILENAMES: Subroutine to input filenames from the keyboard */
num_files = 0;
while (-((num_files <= 0)) | -((num_files > max_files)))
{
E_17:;
INPUT("P ;i", "\026Enter number of files ", &num_files);
if (err_code) {err_stmt=17; goto err_trap;}
E_18:;
BPRINT("");
if (err_code) {err_stmt=18; goto err_trap;}
E_19:;
}
it_4 = num_files;
for (i = 1; i <= it_4; ++i)
{
l_1630:;
/* REPEAT.LOOP1: */
E_20:;
BPRINT("s;i;s;", "\021Enter filename # ", i, "\001 ");
if (err_code) {err_stmt=20; goto err_trap;}
E_21:;
INPUT(" s", &FILENAME_[i]);
if (err_code) {err_stmt=21; goto err_trap;}
E_22:;
BPRINT("");
if (err_code) {err_stmt=22; goto err_trap;}
E_23:;
on_error = 1;
err_code = 0;
trap_line = 1;
E_24:;
BOPEN("\001I", 1, FILENAME_[i], -1);
if (err_code) {err_stmt=24; goto err_trap;}
E_25:;
BCLOSE(1, 0);
if (trap_err)
{
xer_msg(trap_err);
bexit(1);
}
on_error = 0;
err_code = 0;
if (s_comp(FILENAME_[i], "\000") == 0)
goto l_1630;
}
goto sub_ret;
/* ------------------------------------------------- */
l_1750:;
/* HANDLE: Error hander for bad filenames */
E_26:;
BPRINT("s;s;s", "\005File ", FILENAME_[i], "\016 was not found");
if (err_code) {err_stmt=26; goto err_trap;}
E_27:;
BPRINT("");
if (err_code) {err_stmt=27; goto err_trap;}
E_28:;
FILENAME_[i] = s_asgn(FILENAME_[i], "\000");
++err_stmt;
goto un_trap;
/* -------------------------------------------------- */
l_1820:;
/* GET.STRINGS: Subroutines to input search/replace strings */
num_strings = 0;
while (-((num_strings <= 0)) | -((num_strings > max_strings)))
{
E_29:;
INPUT("P ;i", "\047Enter number of search/replace strings ",
&num_strings);
if (err_code) {err_stmt=29; goto err_trap;}
E_30:;
BPRINT("");
if (err_code) {err_stmt=30; goto err_trap;}
E_31:;
}
it_5 = num_strings;
for (i = 1; i <= it_5; ++i)
{
REPLACE_STR_[i] = s_asgn(REPLACE_STR_[i], "\000");
E_32:;
BPRINT("");
if (err_code) {err_stmt=32; goto err_trap;}
E_33:;
BPRINT("s;i", "\015For string # ", i);
if (err_code) {err_stmt=33; goto err_trap;}
E_34:;
INPUT("P ;s", "\021 Enter string ", &FIND_STR_[i]);
if (err_code) {err_stmt=34; goto err_trap;}
E_35:;
INPUT("P ;s", "\023 R)eplace F)ind ", &a_);
if (err_code) {err_stmt=35; goto err_trap;}
E_36:;
BPRINT("");
if (err_code) {err_stmt=36; goto err_trap;}
E_37:;
if ((INSTR(-1, "\002Rr", MID_(&st_1, a_, 1, 1)) == 0))
{
AREPLACE_FLAG[i] = false;
}
else
{
AREPLACE_FLAG[i] = true;
}
if (AREPLACE_FLAG[i] == false)
goto l_2020;
E_38:;
INPUT("P ;s", "\031Enter replacement string ", &REPLACE_STR_[i]);
if (err_code) {err_stmt=38; goto err_trap;}
E_39:;
BPRINT("");
if (err_code) {err_stmt=39; goto err_trap;}
E_40:;
l_2020:;
}
goto sub_ret;
/* -------------------------------------------------- */
l_2060:;
/* READ.LINES: Subroutines to read text lines */
E_41:;
BLPRINT("");
if (err_code) {err_stmt=41; goto err_trap;}
E_42:;
BLPRINT("s;s", "\022PROCESSING FILE : ", FILENAME_[k]);
if (err_code) {err_stmt=42; goto err_trap;}
E_43:;
BOPEN("\001I", 1, FILENAME_[k], -1);
if (err_code) {err_stmt=43; goto err_trap;}
E_44:;
num_lines = 0;
while ((~(EOF(1))) & -((num_lines <= max_lines)))
{
num_lines = num_lines + 1;
E_45:;
INPUT("FLl", 1, &TEXT_LINE_[num_lines]);
if (err_code) {err_stmt=45; goto err_trap;}
E_46:;
}
BCLOSE(1, 0);
goto sub_ret;
/* ------------------------------------------------- */
l_2190:;
/* WRITE.LINES: Subroutines to write text lines */
E_47:;
BOPEN("\001O", 1, FILENAME_[k], -1);
if (err_code) {err_stmt=47; goto err_trap;}
E_48:;
it_6 = num_lines;
for (i = 1; i <= it_6; ++i)
{
E_49:;
BFPRINT(1, "s", TEXT_LINE_[i]);
if (err_code) {err_stmt=49; goto err_trap;}
E_50:; }
BCLOSE(1, 0);
goto sub_ret;
/* -------------------------------------------------- */
/* Subroutine to center a message */
E_51:;
l_2290:;
BPRINT("b;s", 40 - LEN(t_) / 2, t_);
if (err_code) {err_stmt=51; goto err_trap;}
E_52:;
goto sub_ret;
bexit(0);
sub_ret:
switch(sub_pop())
{
case 1: goto g_1;
case 2: goto g_2;
case 3: goto g_3;
case 4: goto g_4;
case 5: goto g_5;
case 6: goto g_6;
}
err_trap: if (trap_err)
{
xer_msg(err_code);
bexit(1);
}
trap_err = err_code;
err_code = 0;
goto l_1750;
un_trap: if (!trap_err)
{
xer_msg(-99);
bexit(1);
}
trap_err = err_code = 0;
switch(err_stmt)
{
case 0: goto E_0;
case 1: goto E_1;
case 2: goto E_2;
case 3: goto E_3;
case 4: goto E_4;
case 5: goto E_5;
case 6: goto E_6;
case 7: goto E_7;
case 8: goto E_8;
case 9: goto E_9;
case 10: goto E_10;
case 11: goto E_11;
case 12: goto E_12;
case 13: goto E_13;
case 14: goto E_14;
case 15: goto E_15;
case 16: goto E_16;
case 17: goto E_17;
case 18: goto E_18;
case 19: goto E_19;
case 20: goto E_20;
case 21: goto E_21;
case 22: goto E_22;
case 23: goto E_23;
case 24: goto E_24;
case 25: goto E_25;
case 26: goto E_26;
case 27: goto E_27;
case 28: goto E_28;
case 29: goto E_29;
case 30: goto E_30;
case 31: goto E_31;
case 32: goto E_32;
case 33: goto E_33;
case 34: goto E_34;
case 35: goto E_35;
case 36: goto E_36;
case 37: goto E_37;
case 38: goto E_38;
case 39: goto E_39;
case 40: goto E_40;
case 41: goto E_41;
case 42: goto E_42;
case 43: goto E_43;
case 44: goto E_44;
case 45: goto E_45;
case 46: goto E_46;
case 47: goto E_47;
case 48: goto E_48;
case 49: goto E_49;
case 50: goto E_50;
case 51: goto E_51;
case 52: goto E_52;
}
}